const request = require("../../utils/request.js");

Page({
  data: {
    cartList: [],        // 购物车列表
    isLoading: false,    // 加载中
    isAllChecked: false, // 是否全选
    totalPrice: 0,       // 选中菜品合计金额
    selectedCount: 0     // 选中菜品数量
  },

  /**
   * 页面显示时重新加载购物车（如从菜品页返回时）
   */
  onShow() {
    this.getCartList();
  },

  /**
   * 1. 获取购物车列表
   */
  async getCartList() {
    this.setData({ isLoading: true });
    try {
      const res = await request.get("/api/cart/list"); // 后端购物车接口
      // 给每个购物车项默认添加“checked: true”（默认选中）
      const cartList = res.map(item => ({ ...item, checked: true }));
      this.setData({ cartList });
      // 计算全选、合计金额、选中数量
      this.calculateCartInfo();
    } catch (err) {
      console.error("获取购物车失败：", err);
    } finally {
      this.setData({ isLoading: false });
    }
  },

  /**
   * 2. 计算购物车信息（全选、合计、选中数量）
   */
  calculateCartInfo() {
    const { cartList } = this.data;
    // 2.1 计算选中数量
    const selectedCount = cartList.filter(item => item.checked).length;
    // 2.2 计算合计金额
    const totalPrice = cartList.reduce((sum, item) => {
      return item.checked ? sum + item.price * item.quantity : sum;
    }, 0);
    // 2.3 判断是否全选（选中数量 === 购物车总数量）
    const isAllChecked = cartList.length > 0 && selectedCount === cartList.length;
    // 更新数据
    this.setData({ selectedCount, totalPrice, isAllChecked });
  },

  /**
   * 3. 单个菜品勾选/取消勾选
   */
  handleCheckItem(e) {
    const cartId = e.currentTarget.dataset.cartid;
    const checked = e.detail.value[0] === "true"; // checkbox的value为字符串
    // 更新对应购物车项的checked状态
    const cartList = this.data.cartList.map(item => {
      if (item.cartId === cartId) item.checked = checked;
      return item;
    });
    this.setData({ cartList });
    // 重新计算购物车信息
    this.calculateCartInfo();
  },

  /**
   * 4. 全选/取消全选
   */
  handleCheckAll(e) {
    const isAllChecked = e.detail.value[0] === "true";
    // 批量更新所有购物车项的checked状态
    const cartList = this.data.cartList.map(item => ({
      ...item,
      checked: isAllChecked
    }));
    this.setData({ cartList, isAllChecked });
    // 重新计算购物车信息
    this.calculateCartInfo();
  },

  /**
   * 5. 调整数量（减少）
   */
  async handleMinus(e) {
    const cartId = e.currentTarget.dataset.cartid;
    // 找到当前购物车项
    const cartItem = this.data.cartList.find(item => item.cartId === cartId);
    if (!cartItem || cartItem.quantity <= 1) return;

    try {
      // 调用后端“更新购物车数量”接口
      await request.post("/api/cart/updateQuantity", {
        cartId,
        quantity: cartItem.quantity - 1
      });
      // 更新本地数量
      const cartList = this.data.cartList.map(item => {
        if (item.cartId === cartId) item.quantity -= 1;
        return item;
      });
      this.setData({ cartList });
      // 重新计算合计
      this.calculateCartInfo();
    } catch (err) {
      console.error("减少数量失败：", err);
    }
  },

  /**
   * 6. 调整数量（增加）
   */
  async handlePlus(e) {
    const cartId = e.currentTarget.dataset.cartid;
    const cartItem = this.data.cartList.find(item => item.cartId === cartId);
    if (!cartItem || cartItem.quantity >= cartItem.stock) return;

    try {
      await request.post("/api/cart/updateQuantity", {
        cartId,
        quantity: cartItem.quantity + 1
      });
      const cartList = this.data.cartList.map(item => {
        if (item.cartId === cartId) item.quantity += 1;
        return item;
      });
      this.setData({ cartList });
      this.calculateCartInfo();
    } catch (err) {
      console.error("增加数量失败：", err);
    }
  },

  /**
   * 7. 跳转至菜品页（购物车为空时）
   */
  goToDishPage() {
    wx.switchTab({ url: "/pages/dish/dish" });
  },

  /**
   * 8. 跳转至结算页（需传递选中的购物车ID列表）
   */
  goToSettle() {
    // 获取选中的购物车ID
    const selectedCartIds = this.data.cartList
      .filter(item => item.checked)
      .map(item => item.cartId);
    // 跳转至结算页（传递参数）
    wx.navigateTo({
      url: `/pages/common/settle/settle?cartIds=${JSON.stringify(selectedCartIds)}`
    });
  }
});